﻿/**
 *		base64转码的处理
 *	@author		吴建凰
 *	@date		2011年8月23日
 *	@mail		wjh_2010@163.com
 *  @modify		将其放入Oss库，并修改接口。吴建凰 2014年6月17日
 */
#ifndef BASE64_H_
#define BASE64_H_

#include <ossType.h>

#ifdef __cplusplus
extern "C" {
#endif

#define BASE64_MAX_STR_LEN		0X8FFFFFFF
#define BASE64_PARAM_ERR		-1				//参数错误

/**
 *		将字符串转换成自定义的base64编码
 *@srcStr		原字符串
 *@length		原字符串长度
 *@destStr		保存转码后的缓冲区，由于base64转码字符串会增大1/3，所有其缓冲区长度必须为原来的4/3。
 *@destLen		目标缓冲区大小
 *@base64Str	自定义的base64字符串
 *@return		成功 返回 destStr字符串的长度
 *				失败 返回 -1
 */
int OssStringToBase64(char* srcStr,int length,char* destStr,int destLen, char* base64Str);

/**
 *			将字符串转换成标准的base64编码
 *@srcStr		原字符串
 *@length		原字符串长度
 *@destStr		保存转码后的缓冲区，由于base64转码字符串会增大1/3，所有其缓冲区长度必须为原来的4/3。
 *@destLen		目标缓冲区大小
 *@return		成功 返回 destStr字符串的长度
 *				失败 返回 -1
 */
int OssStringToStdBase64(char* srcStr,int length,char* destStr,int destLen);

/**
 *		将base64字符串转换成常规字符串
 *@srcStr		base64字符串
 *@length		base64符串长度,由base64字符串的特点，其长度必须是4的倍数。
 *@destStr		保存转码后的缓冲区，由于base64解码后其长度会缩短1/4，所有其缓冲区长度必须大于length的3/4。
 *@destLen		目标缓冲区大小
 *@deBase64Str	与自定义的base64字符串相匹配的解码字符串
 *@return		成功 返回 destStr字符串的长度
 *				失败 返回 -1
 */
int OssBase64ToString(char* srcStr,int length,char* destStr,int destLen,char* deBase64Str);

/**
 *		将转换成标准base64编码的字符串 转换成常规字符串
 *@srcStr		base64字符串
 *@length		base64符串长度,由base64字符串的特点，其长度必须是4的倍数。
 *@destStr		保存转码后的缓冲区，由于base64解码后其长度会缩短1/4，所有其缓冲区长度必须大于length的3/4。
 *@destLen		目标缓冲区大小
 *@return		成功 返回 destStr字符串的长度
 *				失败 返回 -1
 */
int OssStdBase64ToString(char* srcStr,int length,char* destStr,int destLen);

/**
 *		获取标准的base64字符串
 *@return	返回base64字符串，返回的是常量，不能对其修改，否则后果难想象。
 */
char* OssGetStdBase64Str();

/**
 *		获取标准的base64解码字符串
 *@return	返回base64解码字符串，返回的是常量，不能对其修改，否则后果难想象。
 */
char* OssGetStdDeBase64Str();

/**
 *		根据自定义base64字符串生成逆base64字符串
 *@base64Str	base64转码字符串，长度为65个字符，最后一个代表填充字符
 *@deBase64Code	逆base64字符串，缓冲区长度为128
 *@return	
 */
int OssGetDeBase64Code(char* base64Str,char*deBase64Code);

#ifdef __cplusplus
}
#endif

#endif